package top.minishow.pdf.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.dom4j.*;

import java.util.ArrayList;
import java.util.List;

public class XmltoJson {
// beginning of attributes and methods 72418d956989a1e71aecbea9d5a90ecf

    /**
     * xml杞琷son
     *
     * @param xmlStr
     * @return
     * @throws DocumentException
     */
    public static JSONObject xml2Json(String xmlStr) throws DocumentException {
        Document doc = DocumentHelper.parseText(xmlStr);
        JSONObject json = new JSONObject();
        dom4j2Json(doc.getRootElement(), json);
        return json;
    }

    /**
     * xml杞琷son
     *
     * @param element
     * @param json
     */
    public static void dom4j2Json(Element element, JSONObject json) {
        //濡傛灉鏄睘鎬�
        for (Object o : element.attributes()) {
            Attribute attr = (Attribute) o;
            if (!isEmpty(attr.getValue())) {
                put(json,"@" + attr.getName(), attr.getValue());
            }
        }
        List<Element> chdEl = element.elements();
        if (chdEl.isEmpty() && !isEmpty(element.getText())) {//濡傛灉娌℃湁瀛愬厓绱�,鍙湁涓�涓��
            put(json,element.getName(), element.getText());
        }

        for (Element e : chdEl) {//鏈夊瓙鍏冪礌
            if (!e.elements().isEmpty()) {//瀛愬厓绱犱篃鏈夊瓙鍏冪礌
                JSONObject chdjson = new JSONObject();
                dom4j2Json(e, chdjson);
                Object o = json.get(e.getName());
                if (o != null) {
                    JSONArray jsona = null;
                    if (o instanceof JSONObject) {//濡傛灉姝ゅ厓绱犲凡瀛樺湪,鍒欒浆涓簀sonArray
                        JSONObject jsono = (JSONObject) o;
                        json.remove(e.getName());
                        jsona = new JSONArray();
                        jsona.add(jsono);
                        jsona.add(chdjson);
                    }
                    if (o instanceof JSONArray) {
                        jsona = (JSONArray) o;
                        jsona.add(chdjson);
                    }
                    put(json,e.getName(), jsona);
                } else {
                    if (!chdjson.isEmpty()) {
                        put(json,e.getName(), chdjson);
                    }
                }


            } else {//瀛愬厓绱犳病鏈夊瓙鍏冪礌
                for (Object o : element.attributes()) {
                    Attribute attr = (Attribute) o;
                    if (!isEmpty(attr.getValue())) {
                        put(json,"@" + attr.getName(), attr.getValue());
                    }
                }
                if (!e.getText().isEmpty()) {
                    put(json,e.getName(), e.getText());
                }
            }
        }
    }

    private static void put(JSONObject json, String key, Object value) {
        Object objTemp = json.get(key);
        if (objTemp == null) {
            json.put(key, value);
        } else {
            List<Object> listTemp = null;
            if (objTemp instanceof List) {
                listTemp = (List) objTemp;
            } else {
                listTemp = new ArrayList<>();
                listTemp.add(objTemp);
            }
            listTemp.add(value);
            json.replace(key,listTemp);
        }

    }

    public static boolean isEmpty(String str) {

        if (str == null || str.trim().isEmpty() || "null".equals(str)) {
            return true;
        }
        return false;
    }
// end of attributes and methods 72418d956989a1e71aecbea9d5a90ecf


}
